package com.zed.api.common.collection;

import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;

/**
 * 一组成员组成的集合
 *
 * @author Zed
 */
public interface MemberCollection<E> {

    /**
     * 满足{@code filter}的首个成员
     *
     * @param filter {@link Predicate}
     * @return {@link E},可能返回null.
     */
    E findByFilter(Predicate<E> filter);

    /**
     * 所有成员
     *
     * @return {@link List}
     */
    List<E> getItems();

    /**
     * 满足{@code filter}条件的所有成员
     *
     * @param filter {@link Predicate}
     * @return {@link List}
     */
    List<E> getItemsByFilter(Predicate<E> filter);

    /**
     * 经过{@code action}处理后剩余的所有成员
     *
     * @param action {@link Function},流处理函数
     * @return {@link List}
     */
    List<E> getItemsByAction(Function<Stream<E>, Stream<E>> action);

    /**
     * 成员总数
     *
     * @return {@link int}
     */
    int size();
}
